package cn.hy.common.util;

import java.util.ArrayList;
import java.util.List;

public class MemoryPager<T> {
    private final List<T> dataList; // 存储所有数据的列表
    private final int pageSize; // 页面大小
    private final int pageNum; // 页面数

    /**
     * 构造函数，初始化内存分页工具类
     * @param dataList 所有数据的列表
     * @param pageSize 页面大小，单位数据项
     */
    public MemoryPager(List<T> dataList, int pageSize) {
        this.dataList = dataList;
        this.pageSize = pageSize;
        this.pageNum = (int) Math.ceil((double) dataList.size() / pageSize);
    }

    /**
     * 获取页面大小
     * @return 页面大小，单位数据项
     */
    public int getPageSize() {
        return pageSize;
    }

    /**
     * 获取页面数
     * @return 页面数
     */
    public int getPageNum() {
        return pageNum;
    }

    /**
     * 获取指定页的数据
     * @param pageIndex 页号，从0开始
     * @return 页面数据的列表
     */
    public List<T> getPageData(int pageIndex) {
        int startIndex = pageIndex * pageSize;
        int endIndex = Math.min(startIndex + pageSize, dataList.size());
        return new ArrayList<>(dataList.subList(startIndex, endIndex));
    }

    /**
     * 读取指定页中指定偏移量的数据
     * @param pageIndex 页号，从0开始
     * @param offset 偏移量，从0开始
     * @param length 要读取的数据长度，单位数据项
     * @return 读取到的数据的列表
     */
    public List<T> readPageData(int pageIndex, int offset, int length) {
        int startIndex = pageIndex * pageSize + offset;
        int endIndex = Math.min(startIndex + length, dataList.size());
        return new ArrayList<>(dataList.subList(startIndex, endIndex));
    }
}
